﻿using sipfe.Controllers.Base;
using sipfe.model.dataAccess;
using sipfe.service.mante;
using sipfe.service.persona;
using sipfe.util;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.Mvc;

namespace sipfe.Areas.Persona.Controllers
{
    public class ManteEmpresaController : BaseSipfeController
    {
        string Titulo = "MANTENIMIENTO DE EMPRESAS";

        public ViewResult TabRegNuevaEmpresa(string swReg, string nIdeEmpresaCSM)
        {
            ViewBag.swReg = swReg;
            ViewBag.nIdeEmpresaCSM = nIdeEmpresaCSM;
            return View("nuevo/TabRegNuevaEmpresa");            
        }

        public ActionResult regDatosEmpresaInp(string swReg, string nIdeEmpresaCSM)
        {
            cargaPersonaJuridicaPop();
            ViewBag.swReg = swReg;
            ViewBag.nIdeEmpresaCSM = nIdeEmpresaCSM;
            if (!string.IsNullOrEmpty(nIdeEmpresaCSM))
            {
                EmpresaService empresaService = new EmpresaService();
                return View("nuevo/regDatosEmpresaInp", empresaService.ListaEmpresasManteByIdService(Int32.Parse(nIdeEmpresaCSM)).FirstOrDefault() );
            }
            return View("nuevo/regDatosEmpresaInp");
        }

        [HttpPost]
        public ActionResult regDatosEmpresaInp(SIPMaeEmpresa sipMaeEmpresa)
        {
            if (ModelState.IsValid)
            {
                string swReg = Request["swReg"];
                EmpresaService empresaService = new EmpresaService();
                String[] rpta = empresaService.RegistraDatosEmpresaInpService(sipMaeEmpresa);
                //return RedirectToAction("TabRegNuevaEmpresa", new { nIdeEmpresaCSM = rpta[0], swReg = swReg });
                return RedirectToAction("TabUpdateDatosEmpresa", new { n_ideEmpresa = rpta[0], swReg = swReg, razonSocial = sipMaeEmpresa.vRazonSocial, rptaAccion=0 });
                //public ViewResult TabUpdateDatosEmpresa(string swReg, int n_ideEmpresa, string razonSocial, string rptaAccion)
            }
            cargaPersonaJuridicaPop();
            return View("nuevo/TabRegNuevaEmpresa",sipMaeEmpresa);
        }
        public ActionResult regDireccionEmpresaInp(string nIdeEmpresa, string swReg)
        {
            if (string.IsNullOrEmpty(nIdeEmpresa))
            {
                return View("sinIdEmpresa");
            }
            else
            {
                ViewBag.Regiones = formaSelectCompendio(Constante.getInstance().N_IDE_TABLA_REGIONES);
                ViewBag.TipoZona = formaSelectCompendio(Constante.getInstance().N_IDE_TABLA_TIPO_ZONA);
                ViewBag.TipoVia = formaSelectCompendio(Constante.getInstance().N_IDE_TABLA_TIPO_VIA);
                ViewBag.swReg = swReg;
                return View("nuevo/regDireccionEmpresaInp", empresaById(Int32.Parse(nIdeEmpresa)));
            }
        }

        public ActionResult regDatosContactoInp(string nIdeEmpresa, string swReg)
        {
            if (string.IsNullOrEmpty(nIdeEmpresa))
            {
                return View("sinIdEmpresa");
            }
            else
            {
                ViewBag.PaisEmisor = formaSelectCompendio(Constante.getInstance().N_IDE_TABLA_PAIS_EMISOR);
                ViewBag.TipoDocIdent = formaSelectCompendio(Constante.getInstance().N_IDE_TABLA_TIPO_DOC_IDENTIFICACION);
                ViewBag.TipoContacto = formaSelectCompendio(Constante.getInstance().N_IDE_TABLA_TIPO_CONTACTO);
                ViewBag.CargoLaboral = formaSelectCompendio(Constante.getInstance().N_IDE_TABLA_CARGO_LABORAL);
                ViewBag.swReg = swReg;
                return View("nuevo/regDatosContactoInp", empresaById(Int32.Parse(nIdeEmpresa)));
            }
        }

        public ActionResult RegistrarContactoEmpresa(int n_IdePersona, int n_IdeCargo, string n_IdeTipoContacto, int n_IdeEmpresa)
        {
            EmpresaService empresaService = new EmpresaService();
            int n_IdeUsuario = Int32.Parse(Session[Constante.N_IDE_USUARIO].ToString());
            return View("RODatosContactoEmpresa", empresaService.RegistrarContactoEmpresaService(n_IdePersona, n_IdeCargo, n_IdeTipoContacto, n_IdeEmpresa, n_IdeUsuario));
        }

        public ActionResult regDatosTelefonoInp(string nIdeEmpresa, string swReg)
        {
            if (string.IsNullOrEmpty(nIdeEmpresa))
            {
                return View("sinIdEmpresa");
            }
            else
            {              
                ViewBag.swReg = swReg;
                return View("nuevo/regDatosTelefonoInp", empresaById(Int32.Parse(nIdeEmpresa)));
            }
        }

        public ActionResult regDatosCorreoInp(string nIdeEmpresa, string swReg)
        {
            if (string.IsNullOrEmpty(nIdeEmpresa))
            {
                return View("sinIdEmpresa");
            }
            else
            {
                ViewBag.swReg = swReg;
                return View("nuevo/regDatosCorreoInp", empresaById(Int32.Parse(nIdeEmpresa)));
            }
        }
        public ActionResult regDatosVinculoInp(string nIdeEmpresa, string swReg)
        {
            if (string.IsNullOrEmpty(nIdeEmpresa))
            {
                return View("sinIdEmpresa");
            }
            else
            {
                ViewBag.VinculoEmpresa = formaSelectCompendio(Constante.getInstance().N_IDE_TABLA_VINCULO_EMPRESA);
                ViewBag.CategoriaVinculo = formaSelectCompendio(Constante.getInstance().N_IDE_TABLA_CATEGORIA_VINCULO);
                ViewBag.swReg = swReg;
                return View("nuevo/regDatosVinculoInp", empresaById(Int32.Parse(nIdeEmpresa)));
            }
        }

        public ViewResult TabRegistraAccion(string swReg, int nIdeEmpresa, string razonSocial)
        {
            ViewBag.nIdeEmpresaCSM = nIdeEmpresa;
            ViewBag.swReg = swReg;
            ViewBag.razonSocial = razonSocial;            
            return View("update/TabRegistraAccion");
        }

        public ActionResult regDatosAccionInp(string nIdeEmpresa, string swReg, string razonSocial)
        {
            if (string.IsNullOrEmpty(nIdeEmpresa))
            {
                return View("sinIdEmpresa");
            }
            else
            {
               // ViewBag.VinculoEmpresa = formaSelectCompendio(Constante.getInstance().N_IDE_TABLA_VINCULO_EMPRESA);
                ViewBag.TiposAcciones = formaSelectGruposDetalle(Constante.getInstance().N_IDE_GRUPO_TIPO_ACCIONES_TRAMITE);
                ViewBag.nIdeEmpresa = nIdeEmpresa;
                //empresaById(Int32.Parse(nIdeEmpresa))
                int nIdeDep = Int32.Parse(Session[Constante.N_IDE_DEPENDENCIA].ToString());
                List<SIPMaeSolicitud> lista = new List<SIPMaeSolicitud>();
                EmpresaService empresaService = new EmpresaService();
                lista = empresaService.listaAccionesEmpresa(Int32.Parse(nIdeEmpresa), nIdeDep);
                ViewBag.razonSocial = razonSocial;
                return View("nuevo/regDatosAccionInp");
            }
        }
        public ActionResult ListaAccionesEmpresa(int nIdeEmpresa)
        {
            int nIdeDep = Int32.Parse(Session[Constante.N_IDE_DEPENDENCIA].ToString());
            List<SIPMaeSolicitud> lista = new List<SIPMaeSolicitud>();
            EmpresaService empresaService = new EmpresaService();
            lista = empresaService.listaAccionesEmpresa(nIdeEmpresa, nIdeDep);
            return View("ROAcciones", lista);
        }

        public ViewResult TabUpdateDatosEmpresa(string swReg, int n_ideEmpresa, string razonSocial, string rptaAccion)
        {
            ViewBag.nIdeEmpresaCSM = n_ideEmpresa;
            ViewBag.swReg = swReg;
            ViewBag.rptaAccion = rptaAccion;
            ViewBag.razonSocial = razonSocial;
            return View("update/TabUpdateDatosEmpresa");
        }

        public ActionResult updDatosEmpresaInp(string swReg, int nIdeEmpresaCSM)
        {
            cargaPersonaJuridicaPop();
            ViewBag.swReg = swReg;
            ViewBag.nIdeEmpresaCSM = nIdeEmpresaCSM;
            EmpresaService empresaService = new EmpresaService();
            return View("update/updDatosEmpresaInp", empresaService.ListaEmpresasManteByIdService(nIdeEmpresaCSM).FirstOrDefault());
        }
        [HttpPost]
        public ActionResult updDatosEmpresaInp(SIPMaeEmpresa sipMaeEmpresa)
        {
            if (ModelState.IsValid)
            {
                string swReg = Request["swReg"];
                EmpresaService empresaService = new EmpresaService();
                String[] rpta = empresaService.UpdateDatosEmpresaInpService(sipMaeEmpresa);
                return RedirectToAction("TabUpdateDatosEmpresa", new { n_ideEmpresa = rpta[0], swReg = swReg });
            }
            cargaPersonaJuridicaPop();
            return View(sipMaeEmpresa);
        }




        //nIdeEmpresa=@ViewBag.nIdeEmpresaCSM,swReg=ViewBag.swReg

        //TabEditarDatosEmpresa



        /// nuevo 17 enero 2014
        /// 

        public HtmlString RptaAddDatosEmpresaNew(string nIdeEmpresa, string sw, string pais, string tipo, string numero, string nombre)
        {
            StringBuilder rpta1 = new StringBuilder("");
            if (sw.Equals("0"))
            {
                rpta1.Append("window.opener.parent.document.getElementById('nIdeEmpresa').value='" + nIdeEmpresa + "';");
                rpta1.Append("window.opener.parent.document.getElementById('botonClic').click();");
            }
            else if (sw.Equals("1") || sw.Equals("2"))
            {
                rpta1.Append("window.opener.parent.objnIdePersona.value='" + nIdeEmpresa + "';");
                rpta1.Append("window.opener.parent.objPaisDoc.value='" + pais + "';");
                rpta1.Append("window.opener.parent.objTipoDoc.value='" + tipo + "';");
                rpta1.Append("window.opener.parent.objNumDoc.value='" + numero + "';");
                rpta1.Append("window.opener.parent.objNombre.value='" + nombre + "';");
            }
            rpta1.Append("window.close();");
            var rptax = new HtmlString(string.Format("<script language='javascript' type='text/javascript'>{0}</script>", rpta1));
            return (HtmlString)rptax;

        }

        public ActionResult IndexDatosPersona()
        {
            ViewBag.TITULO = Titulo;
            ViewBag.PaisEmisor = formaSelectCompendio(Constante.getInstance().N_IDE_TABLA_PAIS_EMISOR);
            ViewBag.TipoDocIdent = formaSelectCompendio(Constante.getInstance().N_IDE_TABLA_TIPO_DOC_IDENTIFICACION);
            return View("ManteEmpresaCab");
        }

        public ActionResult ListaEmpresasManteById(int n_IdeEmpresa)
        {
            EmpresaService empresaService = new EmpresaService();
            return View("ManteEmpresaDet", empresaService.ListaEmpresasManteByIdService(n_IdeEmpresa));
        }
               

        public ViewResult ListaEmpresasMante(string v_NombresPersona)
        {
            EmpresaService eS   = new EmpresaService();
            List<SIPMaeEmpresa> lista = new List<SIPMaeEmpresa>();
            lista = eS.ListaEmpresasManteService(v_NombresPersona);
            return View(lista);
        }

        public ViewResult UpdateDatosEmpresaInp(int n_IdeEmpresa)
        {
            cargaPersonaJuridicaPop();        
            return View(empresaById(n_IdeEmpresa));
        }

        private SIPMaeEmpresa empresaById(int n_IdeEmpresa)
        {
            EmpresaService empresaService = new EmpresaService();
            return empresaService.ListaEmpresasManteByIdService(n_IdeEmpresa).FirstOrDefault();
        }

        [HttpPost]
        public ActionResult UpdateDatosEmpresaInp_old(SIPMaeEmpresa sipMaeEmpresa)
        {
            if (ModelState.IsValid)
            {
                EmpresaService empresaService = new EmpresaService();
                String[] rpta = empresaService.UpdateDatosEmpresaInpService(sipMaeEmpresa);
                return RedirectToAction("RptaAddDatosEmpresa", new { nIdeEmpresa = rpta[0], sw=0 });
            }
            cargaPersonaJuridicaPop();
            return View(sipMaeEmpresa);
        }



        

        private void cargaPersonaJuridicaPop()
        {
            ViewBag.PaisEmisor = formaSelectCompendio(Constante.getInstance().N_IDE_TABLA_PAIS_EMISOR);
            ViewBag.TipoDocIdent = formaSelectGrupos(Constante.getInstance().N_IDE_GRUPO_IDENTIFICA_EMPRESA);
        }

        public ViewResult TabEditarDatosEmpresa(int n_ideEmpresa)
        {
            ViewBag.nIdeEmpresa = n_ideEmpresa;
            return View();
        }

        





        public ActionResult EditarDatosEmpresaManteInp(int nIdeEmpresa)
        {
            ViewBag.nIdeEmpresa = nIdeEmpresa;
            ViewBag.VinculoEmpresa = formaSelectCompendio(Constante.getInstance().N_IDE_TABLA_VINCULO_EMPRESA);
            ViewBag.CategoriaVinculo = formaSelectCompendio(Constante.getInstance().N_IDE_TABLA_CATEGORIA_VINCULO);
            return View(empresaById(nIdeEmpresa));
        }
        public ActionResult EditarDatosContactoInp_old(int nIdeEmpresa)
        {
            ViewBag.nIdeEmpresa = nIdeEmpresa;
            ViewBag.PaisEmisor = formaSelectCompendio(Constante.getInstance().N_IDE_TABLA_PAIS_EMISOR);
            ViewBag.TipoDocIdent = formaSelectCompendio(Constante.getInstance().N_IDE_TABLA_TIPO_DOC_IDENTIFICACION);
            ViewBag.TipoContacto = formaSelectCompendio(Constante.getInstance().N_IDE_TABLA_TIPO_CONTACTO);
            ViewBag.CargoLaboral = formaSelectCompendio(Constante.getInstance().N_IDE_TABLA_CARGO_LABORAL);            
            return View(empresaById(nIdeEmpresa));
        }

        public ActionResult AgregaTelefonoMante(int n_IdePersona, string v_Prefijo, string v_NumTelefono)
        {
            EmpresaService empresaService = new EmpresaService();
            int n_IdeUsuario = Int32.Parse(Session[Constante.N_IDE_USUARIO].ToString());
            return View("RODatosTelefonoEmpresa", empresaService.AgregaTelefonoManteService(n_IdePersona, v_Prefijo, v_NumTelefono, n_IdeUsuario));
        }

        public ActionResult AgregaCorreoElectronicoMante(int n_IdePersona, string v_Correo)
        {
            EmpresaService empresaService = new EmpresaService();
            int n_IdeUsuario = Int32.Parse(Session[Constante.N_IDE_USUARIO].ToString());
            return View("RODatosCorreoEmpresa", empresaService.AgregaCorreoElectronicoManteService(n_IdePersona, v_Correo, n_IdeUsuario));
        }

        public ActionResult EditarDireccionEmpresaMante_old(int nIdeEmpresa)
        {
            ViewBag.Regiones = formaSelectCompendio(Constante.getInstance().N_IDE_TABLA_REGIONES);
            ViewBag.TipoZona = formaSelectCompendio(Constante.getInstance().N_IDE_TABLA_TIPO_ZONA);
            ViewBag.TipoVia = formaSelectCompendio(Constante.getInstance().N_IDE_TABLA_TIPO_VIA);            
            return View(empresaById(nIdeEmpresa));
        }

        public ActionResult AgregarDireccionEmpresaMante(int n_IdeTipoVia, string v_NomVia, string v_NumPuerta, string n_vLetra, int n_IdeTipoZona, string v_NomZona,
                                                        string v_CenPob, string n_Block, string n_Piso, string n_Interior, string v_Manzana, string v_Lote, string v_Kilometro,
                                                        string v_Ref, int n_IdeRegionNac, int n_IdeProvDir, int n_IdeDistritoDir, int n_IdePersona)
        {
            int n_IdeUsuario = Int32.Parse(Session[Constante.N_IDE_USUARIO].ToString());
            //PersonaService personaService = new PersonaService();
            EmpresaService empresaService = new EmpresaService();
            SIPDetDireccion direccion = new SIPDetDireccion();

            direccion.nIdeEmpresa   = n_IdePersona;
            direccion.nIdeTipoVia   = n_IdeTipoVia;
            direccion.vNomVia       = v_NomVia;
            direccion.vNumPuerta    = v_NumPuerta;
            direccion.vLetra        = n_vLetra;
            direccion.nIdeTipoZona  = n_IdeTipoZona;
            direccion.vNomZona      = v_NomZona;
            direccion.vCenPoblado   = v_CenPob;
            direccion.vNumBlock     = n_Block;
            direccion.vPiso         = n_Piso;
            direccion.vInterior     = n_Interior;
            direccion.vManzana      = v_Manzana;
            direccion.vLote         = v_Lote;
            direccion.vKilometro    = v_Kilometro;
            direccion.vRefer        = v_Ref;
            direccion.nIdeDpto      = n_IdeRegionNac;
            direccion.nIdeProv      = n_IdeProvDir;
            direccion.nIdeDistrito  = n_IdeDistritoDir;
            direccion.nIdeUsuReg    = n_IdeUsuario;
            return View("RODatosDireccionEmpresa", empresaService.AgregarDireccionEmpresaManteService(direccion));
        }

        public ActionResult AgregaVinculoEmpresa(int n_IdeVinculo, string n_IdeCategoria, int n_IdeEmpresa)
        {
            EmpresaService empresaService = new EmpresaService();
            int n_IdeUsuario = Int32.Parse(Session[Constante.N_IDE_USUARIO].ToString());
            return View("ROVinculoEmpresa", empresaService.AgregaVinculoEmpresaService(n_IdeVinculo, n_IdeCategoria, n_IdeEmpresa, n_IdeUsuario));
        }

        public HtmlString CheckVinculoEmpresa(int n_IdeVinculo, int n_IdeEmpresa)
        {
            EmpresaService empresaService = new EmpresaService();
            int rpta = empresaService.CheckVinculoEmpresaService(n_IdeEmpresa, n_IdeVinculo);
            var resultado = "{\"rpta\":" + rpta + "}";
            return new HtmlString(resultado);
        }
        

        public ActionResult AddPersonaJuridicaPop_old(string sw)
        {
            cargaPersonaJuridicaPop();
            ViewBag.swReg = sw;
            return View();
        }

        [HttpPost]
        public ActionResult RegistraDatosEmpresaInp(SIPMaeEmpresa sipMaeEmpresa)
        {
            if (ModelState.IsValid)
            {
                string swReg = Request["swReg"];
                EmpresaService empresaService = new EmpresaService();
                String[] rpta = empresaService.RegistraDatosEmpresaInpService(sipMaeEmpresa);
                //return RedirectToAction("RptaAddDatosEmpresa", new { nIdeEmpresa = rpta[0] });
                return RedirectToAction("RptaAddDatosEmpresa", new { nIdeEmpresa = rpta[0], sw = swReg, pais = sipMaeEmpresa.nIdeCodPaisDoc, tipo = sipMaeEmpresa.nIdeTipoDocum, numero = sipMaeEmpresa.vNumDocum, nombre = sipMaeEmpresa.vRazonSocial });
            }
            cargaPersonaJuridicaPop();
            return View(sipMaeEmpresa);
        }

        public HtmlString RptaAddDatosEmpresa(string nIdeEmpresa , string sw, string pais, string tipo, string numero, string nombre)
        {
            StringBuilder rpta1 = new StringBuilder("");
            if (sw.Equals("0"))
            {                
                rpta1.Append("window.opener.parent.document.getElementById('nIdeEmpresa').value='" + nIdeEmpresa + "';");
                rpta1.Append("window.opener.parent.document.getElementById('botonClic').click();");               
            }
            else if (sw.Equals("1") || sw.Equals("2"))
            {
                rpta1.Append("window.opener.parent.objnIdePersona.value='" + nIdeEmpresa + "';");
                rpta1.Append("window.opener.parent.objPaisDoc.value='" + pais + "';");
                rpta1.Append("window.opener.parent.objTipoDoc.value='" + tipo + "';");
                rpta1.Append("window.opener.parent.objNumDoc.value='" + numero + "';");
                rpta1.Append("window.opener.parent.objNombre.value='" + nombre + "';");
            }
            rpta1.Append("window.close();");
            var rptax = new HtmlString(string.Format("<script language='javascript' type='text/javascript'>{0}</script>", rpta1));
            return (HtmlString)rptax;
            
        }



        public ActionResult ListarActividadEmpresa(string wordSearch)
        {
            //ListarCompendioByNombreService
            CompendioManteService cMs = new CompendioManteService();

            return View(cMs.ListarCompendioByNombreService(Constante.getInstance().N_IDE_TABLA_CIUU, wordSearch));
        }

        public HtmlString CerrarVigenciaItem(int nIdeItem, string tabla )
        {
            EmpresaService eS = new EmpresaService();
            int nIdeGrupo = Convert.ToInt32(Request["nIdeGrupo"]);
            DateTime ayer = UtilitariosUtil.FechaAyer();
            int rpta = eS.CerrarVigenciaItemService(nIdeItem, tabla, ayer);
            return new HtmlString((rpta == 1) ? ayer.ToString("dd/MM/yyyy") : "");
        }

    }
}